<?php

/**
 * buses actions.
 *
 * @package    SistemaRutasEc
 * @subpackage buses
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class reservacionesActions extends sfActions {

    public function executeIndex($sfWebRequest) {
        $this->date = getdate();

        $this->dias_mes = date('t', mktime(0, 0, 0, $this->date['mon'], 1, $this->date['year']));
        //$this->dia_actual = $date['mday'];

        $this->cooperativas = Doctrine_Core::getTable('cooperativa')
                ->createQuery('a')
                ->where('a.activo = true')
                ->andWhere('a.nombre = ?', 'Loja Internacional') //FIXME
                ->orWhere('a.nombre = ?', 'Union Cariamanga')    //FIXME
                ->execute();
    }

    public function executeCancelar(sfWebRequest $request) {
        // sorting
        $idbo = $request->getParameter('id_bo');
        $boleto = Doctrine_Query::create()
                    ->from('boleto b')
                    ->where('b.id_bo = ?', $idbo)
                    ->fetchOne();

//        $boleto = Doctrine::getTable('boleto')->find($idbo);
//        if (!($boleto instanceof boletos)) {
//            $this->redirect404();
//        }
        //$boleto['']
        $boleto->setEstado(Boleto::CANCELADO_RESERVACION);        
        //const CANCELADO_RESERVACION = 'CNR';
        
        //$boleto['estado'] = !$reservacion['estado'];
        $boleto->save();
        $this->getUser()->setFlash('notice', 'Reservacion Cancelada');
        $this->redirect('reservaciones/opcionesreservacion');
    }

    public function executeGraba(sfWebRequest $request) {
        $coop = $request->getParameter('cooperativa');
        $rut = $request->getParameter('ruta');
        $dia = $request->getParameter('dia');
        $frec = $request->getParameter('frecuencia');
        $esc = $request->getParameter('escala');
        $ci = $request->getParameter('cedula');
        $nombre = $request->getParameter('nombre');
        $apellido = $request->getParameter('apellido');
        $telefono = $request->getParameter('telefono');
        $email = $request->getParameter('email');
        $asientos = intval($request->getParameter('asientos'));

        try {
            $cooperativa = Doctrine_Core::getTable('cooperativa')->find($coop);
            $ruta = Doctrine_Core::getTable('ruta')->find($rut);
            $frecuencia = Doctrine_Core::getTable('frecuencia')->find($frec);
            $regla = Doctrine_Query::create()
                    ->from('regla r')
                    ->where('r.id_co = ?', $cooperativa->id_co)
                    ->fetchOne();
            $escala = Doctrine_Core::getTable($regla->especial ? 'escalaespecial' : 'escalanormal')->find($esc);

            //$fecha_turno = date('Y')."-".date('n')."-".$dia;
            $fecha_turno = date('Y-m-d', mktime(0, 0, 0, date('n'), $dia, date('Y')));

            $tur = Doctrine_Core::getTable('turno')->createQuery('t')
                    ->where('t.id_ru = ?', $rut)
                    ->andwhere('t.id_fre = ?', $frec)
                    ->andWhere('t.fecha = ?', $fecha_turno)
                    ->andWhere('t.hora = ?', $frecuencia->hora)
                    ->fetchOne();

            if (null == $tur) {
                throw new sfException('No existe un turno disponible', 1);
            }

            $newcliente = Doctrine_Query::create()
                    ->from('persona p')
                    ->where('p.dni = ?', $ci)
                    ->fetchOne();

            if ($newcliente == null) {
                $newcliente = new Persona();
                $newcliente->setDni($ci);
            }

            $newcliente->setFirstName($nombre);
            $newcliente->setLastName($apellido);
            $newcliente->setEmailAddress($email);
            $newcliente->setTelefono($telefono);
            $newcliente->save();

            $reservacion = BoletoTable::getInstance()->crearReservacion($ci, $tur->id_tu, $asientos, $escala, $frecuencia->especial);

            $m1 = '<b>BIENVENIDO AL =>SISTEMA DE RESERVACIONES EN LINEA<=</b>';
            $tdni = '<br> Sr.(a) => ';
            $fullname = $apellido . ' ' . $nombre;
            $tex1 = '<br>Usted ha realizado una reservacion en la cooperativa ' . $cooperativa->getNombre();
            $tex2 = '<br>En la ruta ' . $ruta->getSalida() . '-' . $ruta->getLlegada();
            $tex3 = '<br>en el horario de ' . $frecuencia->getHora() . ', para el dia ' . $dia . ' del mes en curso';
            $tex4 = '<br>con destino a la ciudad de ' . $escala->ciudad;
            $tex4 = $tex4 . '<br>Número de boleto: ' . $reservacion->id_bo;
            $tex5 = '<br>';

            if ($asientos == 1) {
                $tex5 = $tex5 . 'En el asiento ' . $reservacion->getAsientos()->offsetGet(0)->numero;
            } else {
                $tex5 = $tex5 . 'En los asientos ' . $reservacion->getAsientos()->offsetGet(0)->numero . ' - ' . $reservacion->getAsientos()->offsetGet(1)->numero;
            }

            $m2 = '<br><b>Le recordamos que cuenta con un tiempo de 2 horas de anticipación a la salida del turno para su efectivización<b> 
                  <br><br>Por favor cuide su informacion personal';

            $t = $m1 . $tdni . $fullname . $tex1 . $tex2 . $tex3 . $tex4 . $tex5 . $m2;

            $message = Swift_Message::newInstance()
                    ->setFrom(array('siwebsu@gmail.com' => 'Sistema de Reservaciones'))
                    ->setTo(array($email => 'user'))
                    ->setSubject('Aviso de pedido de Reservacion ' . $nombre . ' ' . $apellido)
                    ->setBody($t)
                    ->setContentType('text/html');

            $transport = Swift_SmtpTransport::newInstance('smtp.googlemail.com', 465, 'ssl')
                    ->setUsername('siwebsu@gmail.com')
                    ->setPassword('s7i4w9e3b2s7u8');

            $mailer = Swift_Mailer::newInstance($transport);
            $mailer->send($message);
        } catch (sfException $error) {
            //$this->dispatcher->notify(new sfEvent($this, 'application.log', array('priority' => sfLogger::ERR, $error->getMessage())));
            return $this->renderText(json_encode(array('status' => 'error', 'message' => $error->getMessage())));
        } catch (Exception $error) {
            $this->dispatcher->notify(new sfEvent($this, 'application.log', array('priority' => sfLogger::ERR, $error->getMessage())));
            return $this->renderText(json_encode(array('status' => 'error', 'message' => 'Ha ocurrido un error al guardar la reservación')));
        }

        return $this->renderText(json_encode(array('status' => 'ok')));
    }

    public function executeProcesa($param) {
        //$this->getUser()->setFlash('notice', 'Datos de la Unidad editados exitosamente');
        if (isset($_POST["id"])) {
            $opciones = '<option value="0"> Elige una ruta</option>';

            $ruts = Doctrine::getTable('ruta')->createQuery('r')
                    ->where('r.id_co = ?', $_POST['id'])
                    ->execute();

            foreach ($ruts as $rt):
                $opciones.='<option value="' . $fila[$rt->getIdRu()] . '">' . $fila[$rt->getSalidad()] . '</option>';
            endforeach;

            echo $opciones;
        }
    }

    public function executeOpcionesreservacion(sfWebRequest $request) {
        if ($request->isMethod('POST')) {
            $this->reservaciones = Doctrine_Core::getTable('boleto')
                    ->createQuery('b')
                    ->where('b.dni = ?', $request->getParameter('ci'))
                    ->andWhere('b.origen = ?', "RES")                    
                    ->andWhere('b.estado = ?', "RES")  
                    ->execute();

            $this->persona = Doctrine_Core::getTable('persona')
                    ->createQuery('r')
                    ->where('r.dni = ?', $request->getParameter('ci'))
                    ->fetchOne();
        }
    }

    public function executeBuscarRutas(sfWebRequest $request) {
        if ($request->isXmlHttpRequest()) {
            $id_co = $request->getParameter('cooperativa');
            $json_data = array();
            $rutas = Doctrine_Core::getTable('ruta')->createQuery('r')->where('r.id_co = ?', $id_co)->execute();

            foreach ($rutas as $ruta) {
                $json_data[] = array('id' => $ruta->id_ru, 'nombre' => $ruta->salida . ' -- ' . $ruta->llegada);
            }

            return $this->renderText(json_encode($json_data));
        }

        $this->forward404();
    }

    public function executeBuscarFrecuencias(sfWebRequest $request) {
        if ($request->isXmlHttpRequest()) {
            $id_ru = $request->getParameter('ruta');
            $dia = $request->getParameter('dia');
            $json_data = array();

            $query = Doctrine::getTable('frecuencia')
                    ->createQuery('f')
                    ->where('f.id_ru = ?', $id_ru)
                    ->andWhere('f.activo = true');

            if (date('d') == $dia) {
                $query->andWhere('f.hora > ?', date('H:i'));
            }

            $frecuencias = $query->execute();

            foreach ($frecuencias as $frn) {
                $json_data[] = array(
                    'id' => $frn->id_fr,
                    'nombre' => $frn->hora . "-" . ($frn->especial ? 'Especial' : 'Normal')
                );
            }

            return $this->renderText(json_encode($json_data));
        }

        $this->forward404();
    }

    public function executeBuscarEscalas(sfWebRequest $request) {
        if ($request->isXmlHttpRequest()) {
            $id_co = $request->getParameter('cooperativa');
            $id_ru = $request->getParameter('ruta');
            $id_fr = $request->getParameter('frecuencia');

            $json_data = array();
            $regla = Doctrine_Query::create()->from('regla r')->where('r.id_co = ?', $id_co)->fetchOne();
            $ruta = Doctrine_Core::getTable('ruta')->find($id_ru);
            $frecuencia = Doctrine_Query::create()->from('frecuencia f')->where('f.id_fr = ?', $id_fr)->fetchOne();


            if ($regla->especial) {
                $escalas = Doctrine::getTable('escalaespecial')
                        ->createQuery('e')
                        ->where('e.id_ru = ?', $id_ru)
                        ->andWhere('e.ciudad <> ?', $ruta->salida)
                        ->execute();
                if ($frecuencia->getEspecial() == TRUE) {
                    foreach ($escalas as $escala) {
                        $json_data[] = array(
                            'id' => $escala->id_ee,
                            'nombre' => $escala->ciudad . ' -- ' . $escala->costoespecial
                        );
                    }
                } else {
                    foreach ($escalas as $escala) {
                        $json_data[] = array(
                            'id' => $escala->id_ee,
                            'nombre' => $escala->ciudad . ' -- ' . $escala->costonormal
                        );
                    }
                }
            } else {
                $escalas = Doctrine::getTable('escalanormal')
                        ->createQuery('e')
                        ->where('e.id_ru = ?', $id_ru)
                        ->andWhere('e.ciudad <> ?', $ruta->salida)
                        ->execute();

                foreach ($escalas as $escala) {
                    $json_data[] = array(
                        'id' => $escala->id_en,
                        'nombre' => $escala->ciudad . ' -- ' . $escala->costonormal
                    );
                }
            }

            return $this->renderText(json_encode($json_data));
        }

        $this->forward404();
    }

}